﻿using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
namespace demo2
{

	/**
	 * 玩家物体：
玩家物体在网络HLAPI中有点特殊，NetworkManager对玩家物体的处理流程是：

	* 将包含NetworkIdentity组件的预设体注册为派生预设体
	* 客户端连接到服务器
	* 客户端调用AddPlayer(), 发送MsgType.AddPlayer类型的消息给服务器
	* 服务器接收到消息，调用NetworkManager.AddPlayer()
	* 服务器从预设体中创建物体
	* 服务器上为新创建的玩家物体调用NetworkManager.AddPlayerForConnection()
	* 玩家物体被创建出来（你不需要再调用NetworkManager.Spawn()）
	* 一个MsgType.Owner类型的消息发送给客户端（只发送给这个连接进来的客户端）
	* 客户端接收到消息
	* 客户端上调用OnStartLocalPlayer，并且将isLocalPlayer设置为True


	 */

    //*_*[NetworkSettings(channel = 0, sendInterval = 0.033f)]
    public class Player : NetworkBehaviour
    {
        

		//当服务器spawn一个网络物体时,网络物体调用OnStartServer,分配netID.并注册到相应服务器上的的NetworkScene的网络物体列表中，更新如isServer为true等信息
		public override void OnStartServer(){
			Debug.LogError (gameObject.name +" netId :"+this.netId+" OnStartServer1...\n"+outlog);

		}

		public override void PreStartClient(){
			Debug.LogError (gameObject.name +" PreStartClient...\n"+outlog);
		}
		public override void OnStartClient(){
			Debug.LogError (gameObject.name +" OnStartClient...\n"+outlog);
		}

		void Start () {
			Debug.LogError (gameObject.name +" Start...");
		}
		public override void OnStopAuthority(){
			Debug.LogError (gameObject.name +" OnStopAuthority...\n"+outlog);
		}
		public override void OnStartAuthority(){
			Debug.LogError (gameObject.name +" OnStartAuthority...\n"+outlog);
		}
		/*
		 * OnStartLocalPlayer只有在玩家的客户端才能执行，并且是在OnStartClient之后，so,OnStartClient函数中isLocalPlayer还没被设置
		*/
		public override void OnStartLocalPlayer(){
			Debug.LogError (gameObject.name +" OnStartLocalPlayer...\n"+outlog);
		}
			
		public override void OnNetworkDestroy(){
			Debug.LogError (gameObject.name +" OnNetworkDestroy...\n"+outlog);
		}

		string outlog{
			get{
				return string.Format ("isClient:{0}\nisServer:{1} \nisLocalPlayer:{2} \nlocalPlayerAuthority:{3} \nhasAuthority:{4}", isClient, isServer, isLocalPlayer, localPlayerAuthority, hasAuthority);
			}
		}


		public bool isShow;
        void Update()
        {
			if (isShow&& Input.GetKey(KeyCode.Q))
            {
				isShow = false;
				Debug.LogErrorFormat ("isLocalPlayer:{0} \nlocalPlayerAuthority:{1} \nisClient:{2}\nisServer:{3}",isLocalPlayer,localPlayerAuthority,isClient,isServer);
				Debug.LogErrorFormat ("hasAuthority:{0}",hasAuthority);
				isShow = false;
            }
            
        }
        

    }
}
